#include <stdio.h>
#include <sys/socket.h>
#include <netinet/ether.h>
#include <arpa/inet.h>

int main()
{
    //数据帧家族
    //ETH_IPV4:ipv4数据
    //ETH_P_ARP:ARP数据包
    //ETH_P_ALL:任意数据类型
    //获取从网卡上走的所有数据
    int sock = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
    if(sock < 0)
    {
        perror("socket");
        return -1;
    }

    while(1)
    {
        char msg[1024] = {0};
        if(recvfrom(sock,msg,1024,0,NULL,NULL) < 0)
        {
            perror("recvfrom");
            return -1;
        }
        char src_mac[18] = {0};
        char dest_mac[18] = {0};
        sprintf(dest_mac,"%x:%x:%x:%x:%x:%x",msg[0],msg[1],msg[2],msg[3],msg[4],msg[5]);
        sprintf(src_mac,"%x:%x:%x:%x:%x:%x",msg[6],msg[7],msg[8],msg[9],msg[10],msg[11]);

        printf("数据从 %s ----> %s\n",src_mac,dest_mac);
    }
    return 0;
}